package a.f.d;

import a.a.db;
import a.a.m;
import a.c.ab;
import a.c.bb;
import a.c.e;
import a.c.q;
import a.c.y;
import a.f.d.a.ac;
import a.f.d.a.bc;
import a.f.d.a.hc;
import a.f.d.a.zb;
import a.f.o;

import java.util.Arrays;

public class ob
  implements fb, zb
{
  byte a;
  public static final byte b = 0;
  public static final byte c = 1;
  public static final byte d = 2;
  public static int e;
  
  public void a(byte paramByte)
  {
    this.a = paramByte;
  }
  
  public byte a()
  {
    return this.a;
  }
  
  public int a(o paramo, a.c.x paramx, ab paramab)
  {
    int i1 = f.o;
    int n = f.n;
    n.a(this, "Topological layering ...");
    if (i1 == 0) {
      if (paramo.n()) {
        return 0;
      }
    }
    a.c.x localx = paramo.B();
    int i = m.a(paramo, localx);
    a.i.z localz = new a.i.z(paramo, localx);
    int j = 0;
    int k = 0;
    if (k < i) {
      localz.c(new Integer(k));
    }
    label203:
    do
    {
      int m = a(paramo, paramx);
      n.a(this, "Reverse edges ...");
      a(paramo, paramx, paramab);
      if (n != 0) {
        break label224;
      }
      switch (this.a)
      {
      case 1: 
        n.a(this, "Downshift nodes ...");
        a(paramo, paramx, m);
        if (i1 != 0) {
          break label203;
        }
        if (n == 0) {
          break;
        }
      case 2: 
        n.a(this, "doGanserStuff");
        a(paramo, paramx, m);
        m = b(paramo, paramx);
        break;
      }
      j = Math.max(j, m);
      k++;
      if (n == 0) {
        break;
      }
      localz.g();
      paramo.a(localx);
    } while (i1 != 0);
    label224:
    return j;
  }
  
  int a(q paramq, a.c.x paramx)
  {
    int n = f.o;
    int m = f.n;
    bb localbb = a.a.x.b(paramq);
    localbb.j();
    int i = 0;
    int j = 0;
    a.c.w localw1 = localbb.l();
    do
    {
      do
      {
        if (!localw1.e()) {
          break;
        }
        paramx.a(localw1.d(), -1);
        localw1.f();
        if (n != 0) {
          break label95;
        }
        if (m != 0) {
          break label88;
        }
      } while (m == 0);
    } while (n != 0);
    localw1 = localbb.l();
    label88:
    label95:
    do
    {
      do
      {
        if (!localw1.e()) {
          break;
        }
        e locale = localw1.d();
        if (m != 0) {
          break label223;
        }
        int k = -1;
        a.c.w localw2 = locale.p();
        do
        {
          do
          {
            if (!localw2.e()) {
              break;
            }
            k = Math.max(k, paramx.getInt(localw2.d()));
            localw2.f();
            if (n != 0) {
              break label211;
            }
            if (m != 0) {
              break label209;
            }
          } while (m == 0);
          paramx.a(locale, k + 1);
          j = Math.max(j, k + 1);
        } while (n != 0);
        localw1.f();
      } while (m == 0);
    } while (n != 0);
    label209:
    label211:
    label223:
    return j + 1;
  }
  
  private void a(q paramq, a.c.x paramx, ab paramab)
  {
    paramab.a(w.a(paramq, paramx));
  }
  
  private void a(q paramq, a.c.x paramx, int paramInt)
  {
    int i1 = f.o;
    int n = f.n;
    a.c.z[] arrayOfz = new a.c.z[paramInt + 1];
    int i = 0;
    if (i <= paramInt)
    {
      arrayOfz[i] = new a.c.z();
      i++;
    }
    int j;
    for (;;)
    {
      if ((i1 != 0) || (n == 0))
      {
        if (n == 0) {
          break;
        }
        if (i1 == 0)
        {
          a.c.w localw1 = paramq.v();
          do
          {
            do
            {
              if (!localw1.e()) {
                break;
              }
              arrayOfz[paramx.getInt(localw1.d())].b(localw1.d());
              localw1.f();
            } while (n == 0);
          } while (i1 != 0);
          j = paramInt - 1;
        }
      }
    }
    label306:
    label308:
    label311:
    do
    {
      if (j < 0) {
        break;
      }
      a.c.z localz = arrayOfz[j];
      y localy = localz.h();
      do
      {
        do
        {
          if (!localy.e()) {
            break label311;
          }
          e locale = (e)localy.j();
          if (n != 0) {
            break;
          }
          if (locale.e() != 0)
          {
            int k = 0;
            int m = paramInt;
            a.c.w localw2 = locale.q();
            if (localw2.e()) {}
            while (i1 != 0)
            {
              m = Math.min(m, paramx.getInt(localw2.d()));
              localw2.f();
              if (i1 != 0) {
                break label308;
              }
              if (n != 0) {
                break label306;
              }
              if (n == 0) {
                break;
              }
            }
            if ((i1 != 0) || ((m > paramx.getInt(locale) + 1) && (locale.e() >= locale.d()))) {
              paramx.a(locale, m - 1);
            }
          }
          localy.f();
        } while (n == 0);
        j--;
      } while (i1 != 0);
    } while (n == 0);
  }
  
  private int b(q paramq, a.c.x paramx)
  {
    int k = f.o;
    int j = f.n;
    int[] arrayOfInt = new int[paramq.j()];
    Object localObject = paramq.v();
    do
    {
      do
      {
        if (!((a.c.w)localObject).e()) {
          break;
        }
        e locale1 = ((a.c.w)localObject).d();
        if ((k == 0) && (j != 0)) {
          break label90;
        }
        arrayOfInt[locale1.f()] = paramx.getInt(locale1);
        ((a.c.w)localObject).f();
      } while (j == 0);
    } while (k != 0);
    label90:
    localObject = new int[paramq.l()];
    Arrays.fill((int[])localObject, 1);
    int i = db.a(paramq, arrayOfInt, (int[])localObject);
    a.c.w localw = paramq.v();
    do
    {
      do
      {
        if (!localw.e()) {
          break;
        }
        e locale2 = localw.d();
        paramx.a(locale2, arrayOfInt[locale2.f()]);
        localw.f();
      } while (j == 0);
    } while (k != 0);
    return i;
  }
  
  public void a(o paramo, ac paramac, bc parambc)
  {
    new hc(this).a(paramo, paramac, parambc);
  }
}



/* Location:           E:\idea\

 * Qualified Name:     a.f.d.ob

 * JD-Core Version:    0.7.0.1

 */